<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
            单例（单一实例-单一对象--）模式
                类--能创建对象-每调用一次 就能创建一个新的对象(新的实例)

                ***让类提供一个方法（静态方法）每次调用都得到一个 相同的对象 
                    第一次调用方法 需要创建
                    下一次调用对象，直接返回上一次的对象

                    好处：不需要频繁的创建对象

                     网页--弹框会被设计为单例
        
        */
        // let dog = null;//保存已经创建的狗
        class Dog {
            // 类的属性 类是全局变了，类的属性也是相当于全局变量
            static dog = null;////保存已经创建的狗 
            static shareDog() {
                //
                // 第一次调用方法 需要创建
                // 下一次调用，直接返回上一次的对象

                // 判断 是否创建 狗
                if (Dog.dog == null) {
                    Dog.dog = new Dog();
                    console.log('创建');
                } else {
                    console.log(Dog.dog, '已经被创建。直接返回');
                }

                return Dog.dog;
            }
        }
        let d1 = new Dog();
        let d2 = new Dog();
        console.log(d1 === d2);

        let d3 = Dog.shareDog();
        let d4 = Dog.shareDog();

        // console.log(d3 === d4);
    </script>

</body>

</html>